<?php
/**
 * Page gestion des statuts
 * Permet l'affichage, l'ajout, la suppression et la modification des statuts
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class statutAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des enseignants');
	$this->addAriane(shRequest::link('administration'), 'Administration');
	$this->addAriane(shRequest::link('administration','enseignant'), 'Gestion des enseignants');
    }

    /**
     * Execute la méthode par défaut pour l'action user
     */
    public function execute() {

    }

    /**
     * Ajouter un statut
     */
    public function executeCreate() {
	$this->setTitle('Ajout d\'un statut');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Ajouter un statut');

	shField::text('Intitulé')
		->setHelper('Chaîne alphanumérique')
		->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) {
		    if ( !$formulaire->getField('Intitulé')->isError() ) {
			if ( shSGBD::count('SELECT COUNT(id) '.
			'FROM statut '.
			'WHERE intitule=:intitule',
			array(':intitule' => $formulaire->getField('Intitulé')->getValue()))) {
			    $formulaire->getField('Intitulé')->setError('L\'intitulé existe déjà');
			}
		    }
		})
	;

	$formulaire->setSubmit(function($formulaire) {
		    // Insertion du statut
		    $id_user = shSGBD::insert(
			    'INSERT INTO statut(intitule) '.
			    'VALUES(:intitule)',
			    array(':intitule' => $formulaire->getField('Intitulé')->getValue())
		    );
		    shAction::redirect('administration','enseignant');
		})
	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Modification d'un statut
     * @param <integer> Identifiant du statut à modifier
     */
    public function executeEdit($id_statut) {
	$this->setTitle('Modification d\'un statut');

	if ( !($statut = shSGBD::selectOne(
	'SELECT statut.id, statut.intitule '.
	'FROM statut '.
	'WHERE id=? ',
	array($id_statut)
	)) ) {
	    throw new Exception('Statut inconnu');
	    return false;
	}

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier le statut');

	shField::text('Intitulé')
		->setHelper('Chaîne alphanumérique')
		->setValue($statut->intitule)
		->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) use($statut) {
		    if ( !$formulaire->getField('Intitulé')->isError() ) {
			if ( shSGBD::count('SELECT COUNT(id) '.
				'FROM statut '.
				'WHERE intitule=:intitule '.
				'AND id!=:id ',
				array(':intitule' => $formulaire->getField('Intitulé')->getValue(),
				':id' => $statut->id)) > 0 ) {
			    $formulaire->getField('Intitulé')->setError('L\'intitulé existe déjà');
			}
		    }
		})
	;

	$formulaire->setSubmit(function($formulaire) use($statut) {
		    shSGBD::update(
			    'UPDATE statut SET intitule=:intitule '.
			    'WHERE id=:id ',
			    array(':intitule' => $formulaire->getField('Intitulé')->getValue(),
			    ':id' => $statut->id
			    )
		    );
		    shAction::redirect('administration','enseignant');
		})
	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Suppression d'un statut
     * @param <integer> Identifiant du statut à modifier
     */
    public function executeDelete($id_statut) {
	$this->setTitle('Transfert d\'un statut');

	// On récupère les enseignants qui ont ce statut
	$enseignants = shSGBD::select('SELECT id FROM enseignant WHERE id_statut=?', array($id_statut));

	// Si il y a des enseignants qui ont ce statut alors on crée un formulaire
	if (!empty($enseignants)) {
	    $formulaire = new shFormulaire;
	    $formulaire->setSubmitText('Transferer le statut');

	    // On récupère la liste des statuts ou transferer le statut
	    $statuts = shSGBD::select('SELECT id,intitule FROM statut WHERE id!=?',array($id_statut));
	    $select = shField::select('Transferer vers')->appendTo($formulaire);
	    foreach ($statuts as $statut) {
		$select->addOption($statut->id,$statut->intitule);
	    }

	    $formulaire->setSubmit(function($formulaire) use ($id_statut) {
			// On change le statut des enseignants vers le nouveau
			shSGBD::update(
				'UPDATE enseignant SET id_statut=? '.
				'WHERE id_statut=? ',
				array($formulaire->getField('Transferer vers')->getValue(),$id_statut)
			);
			// On supprime l'ancien statut
			shSGBD::delete('DELETE FROM statut WHERE id=?',array($id_statut));

			$formulaire->setConfirmation('Les enseignants ont été transférés '.$formulaire->getField('Transferer vers')->getValue());
			shAction::redirect('administration','enseignant');
		    })
	    ;

	}else {
	    // Suppression du statut
	    shSGBD::delete('DELETE FROM statut WHERE id=?',array($id_statut));
	    // Redirection
	    shAction::redirect('administration', 'enseignant');

	}

	$this->assign('formulaire', $formulaire);
    }

}
?>